﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLL;
namespace QuanLyDatDai
{
    public partial class FrmGopThua : Form
    {
        
        public FrmGopThua()
        {
            InitializeComponent();
        }

        #region Tabpage Gộp thửa
        //private void btnTim_Click(object sender, EventArgs e)
        //{
        //    ThuaDatBLL td = new ThuaDatBLL();
        //    TIMTHUADAT_Result thuadat = new TIMTHUADAT_Result();
        //    ListViewItem item;
        //    try
        //    {
        //        thuadat = td.TimKiemMaThuaDat(txtMaThuaDatTimKiem.Text);
        //        if (thuadat != null)
        //        {
        //            if (!KiemTraItemTonTaiListView())
        //            {
        //                item = listViewDuaVoSo.Items.Add(thuadat.MATHUADAT.ToString().Trim());
        //                item.SubItems.Add(thuadat.DIACHI.ToString());
        //                item.SubItems.Add(thuadat.THOIHAN.ToString());
        //            }
        //            else
        //            {
        //                MessageBox.Show("Thửa đất đã tồn tại trong danh sách!", "Thông báo");
        //            }
        //        }
        //        else
        //        {
        //           MessageBox.Show("Dữ liệu không tìm thấy!","Thông Báo", MessageBoxButtons.YesNo);                    
        //        }
        //    }
        //    catch
        //    {
        //        MessageBox.Show("Mời nhập giá trị ô tìm kiếm", "Lỗi");
        //    }
            
        //}

        private void FrmGopThua_Load(object sender, EventArgs e)
        {
            ThuaDatBLL thuadat = new ThuaDatBLL();
            cbbThoiGianKetThuc.DataSource = thuadat.DanhSachThoiGian() ;
            cbbThoiGianKetThuc.DisplayMember = "DDMMYYYY";
            cbbThoiGianKetThuc.ValueMember = "MaThoiGian";
            DanhSachCacThuaDatTuDonTachGop();
            LoadBanDo();

        }

        private void btnThemThoiGian_Click(object sender, EventArgs e)
        {
            groupBox2.Enabled = true;            
        }

        private void btnLuuThoiGian_Click(object sender, EventArgs e)
        {

        }

        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            //ThuaDat_ChuSuDung = new List<TIMTHUADATTHEOCHUSUDUNG_Result>();
            //ThuaDatBLL thuadat = new ThuaDatBLL();
            //string[] dsMaTd = new string[listViewDuaVoSo.Items.Count];
            //if (listViewDuaVoSo.Items.Count != 0)
            //{
            //    for (int i = 0; i < listViewDuaVoSo.Items.Count; i++)
            //    {
            //        TIMTHUADATTHEOCHUSUDUNG_Result td = new TIMTHUADATTHEOCHUSUDUNG_Result();                    
            //        td.MATHUADAT= dsMaTd[i] = listViewDuaVoSo.Items[i].Text;
            //        ThuaDat_ChuSuDung.Add(td);
            //    }
            //}
            //try
            //{
            //    for (int i = 0; i < listViewDuaVoSo.Items.Count; i++)
            //    {
            //        thuadat.CapNhatThuaCuHetHan(dsMaTd[i], cbbThoiGianKetThuc.SelectedValue.ToString());
            //    }
            //    MessageBox.Show("Cập nhật thành công", "Thông báo");
            //    FrmThemThuaDat themthuadat = new FrmThemThuaDat();
            //    themthuadat.listThuadatCanGop = ThuaDat_ChuSuDung;
            //    themthuadat.Visible = true;
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show(ex.Message, "Thông Báo");
            //}
            ThuaDatBLL thuadat = new ThuaDatBLL();
            
            string[] dsMaTd = new string[listViewDuaVoSo.Items.Count];
            for (int i = 0; i < listViewDuaVoSo.Items.Count; i++)
            {
                dsMaTd[i] = listViewDuaVoSo.Items[i].Text;
            }
            try
            {
                for (int i = 0; i < listViewDuaVoSo.Items.Count; i++)
                {
                    thuadat.CapNhatThuaCuHetHan(dsMaTd[i], cbbThoiGianKetThuc.SelectedValue.ToString());
                }
                MessageBox.Show("Cập nhật thành công", "Thông báo");
            }
            catch
            {
                MessageBox.Show("Việc cập nhật bị lỗi", "Thông báo");
            }
            
        }

        //private bool KiemTraItemTonTaiListView()
        //{
        //    bool check = false;
        //    foreach (ListViewItem item in listViewDuaVoSo.Items)
        //    {
        //        if (item.Text.Trim() == txtMaThuaDatTimKiem.Text)
        //        {
        //            check = true;
        //            break;
        //        }
        //    }
        //    return check;
        //}

        private void btnDuaVaoDSGop_Click(object sender, EventArgs e)
        {

        }

        public List<TIMTHUADATTHEOCHUSUDUNG_Result> ThuaDat_ChuSuDung { get; set; }

        private void DanhSachCacThuaDatTuDonTachGop()
        {
            ListViewItem item;
            listViewDuaVoSo.Items.Clear();
            if (ThuaDat_ChuSuDung!=null)
            {
                for (int i = 0; i < ThuaDat_ChuSuDung.Count; i++)
                {
                    item = listViewDuaVoSo.Items.Add(ThuaDat_ChuSuDung[i].MATHUADAT.Trim());
                    item.SubItems.Add(ThuaDat_ChuSuDung[i].DIACHI);
                    item.SubItems.Add(ThuaDat_ChuSuDung[i].TENCSD);
                }
            }
        }

        private void btnTim_Click_1(object sender, EventArgs e)
        {

        }
        #endregion


        #region Tabpage tạo mới thửa đất từ các thửa cần gộp
        

        private void tabControl1_Selected(object sender, TabControlEventArgs e)
        {
            LoaiDatBLL loaidat = new LoaiDatBLL();
            cbbMaLoaiDat.DataSource = loaidat.DanhSachLoaiDat();
            ThuaDatBLL thuadat = new ThuaDatBLL();
            cbbPhanLoaiThua.DataSource = thuadat.DanhSachPhanLoaiThua();
            cbBoxThoiGianHinhThanh.DataSource = thuadat.DanhSachThoiGian();
            cbbMaToBanDo.DataSource = thuadat.DanhSachToBanDo();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            DaGiacBLL dagiac = new DaGiacBLL();
            ThuaDatBLL thuadat = new ThuaDatBLL();
            if (ValidateTab())
            {
                if (dataGridViewNhapToaDo.Rows.Count > 2)
                {
                    dagiac.TaoDaGiac(txtMaDaGiac.Text, ToaDo(), txtMieuTa.Text);
                    if (!dagiac.KiemTraTinhHopLeDaGiac(txtMaDaGiac.Text))
                    {
                        MessageBox.Show("đa giác này không hợp lệ! mời nhập lại tọa độ", "Thông báo");
                        dagiac.DeleteDaGiac(txtMaDaGiac.Text);
                        return;
                    }
                }
                else
                {
                    MessageBox.Show("Mời bạn nhập vô tọa độ! ", "Lỗi");
                    return;
                }
                try
                {
                    thuadat.ThemThuaDat(txtMaThuaDat.Text, txtMaDaGiac.Text,
                    cbbPhanLoaiThua.SelectedValue.ToString(), cbbMaToBanDo.SelectedValue.ToString(),
                    cbbMaLoaiDat.SelectedValue.ToString(), cbBoxThoiGianHinhThanh.SelectedValue.ToString(),
                    "TG4", txtDiaChi.Text, txtNhaO.Text, txtCongTrinhKhac.Text, txtThoiHan.Text,
                    txtRungSanXuat.Text, txtCayLauNam.Text, txtGhiChu.Text);

                    LuuThuaDatChaCon();
                    MessageBox.Show("Thêm thửa đất thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    dagiac.DeleteDaGiac(txtMaDaGiac.Text);
                    MessageBox.Show(ex.InnerException.Message, "Lỗi");
                }
            }
            else
            {
                MessageBox.Show("Mời nhập dữ liệu phù hợp", "Thông báo");
            }
        }

        private void btnTaoThoiGian_Click(object sender, EventArgs e)
        {
            groupBox5.Enabled = true;
        }

        #region Validate dự liệu nhập

        private void btnLuuThoiGianHinhThanh_Click(object sender, EventArgs e)
        {
            ThuaDatBLL thuadat = new ThuaDatBLL();
            try
            {
                thuadat.ThemThoiGian(txtMaThoiGianHinhThanh.Text, dateTimePickerTaoThoiGian.Value.Date);
                MessageBox.Show("Lưu thời gian thành công", "thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch
            {
                MessageBox.Show("Chưa nhập mã thời gian", "Thông báo");
            }
            cbBoxThoiGianHinhThanh.DataSource = thuadat.DanhSachThoiGian();
            groupBox5.Enabled = false;
        }

        private bool ValidateTab()
        {
            bool bMaThuaDat = ValidatetxtMaThuaDat();
            bool bMaDaGiac = ValidatetxtMaDaGiac();
            // bool bSoDinh = ValidatetxtSoDinh();
            bool bDiaChi = ValidatetxtDiaChi();
            bool bThoiHan = ValidatetxtThoiHan();
            if (bMaThuaDat == false || bMaDaGiac == false || bDiaChi == false || bThoiHan == false)
                return false;
            else
                return true;
        }
        private bool ValidatetxtMaThuaDat()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtMaThuaDat.Text))
            {
                errorProviderThemThuaDat.SetError(txtMaThuaDat, "Mời bạn nhập Mã thửa đất");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtMaThuaDat, "");
            return bStatus;
        }
        private bool ValidatetxtMaDaGiac()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtMaDaGiac.Text))
            {
                errorProviderThemThuaDat.SetError(txtMaDaGiac, "Mời bạn nhập mã đa giác");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtMaDaGiac, "");
            return bStatus;
        }      
        private bool ValidatetxtDiaChi()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtDiaChi.Text))
            {
                errorProviderThemThuaDat.SetError(txtDiaChi, "Mời bạn nhập địa chỉ");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtDiaChi, "");
            return bStatus;
        }
        private bool ValidatetxtThoiHan()
        {
            bool bStatus = true;
            if (string.IsNullOrEmpty(txtThoiHan.Text))
            {
                errorProviderThemThuaDat.SetError(txtThoiHan, "Mời bạn nhập thời hạn");
                bStatus = false;
            }
            else
                errorProviderThemThuaDat.SetError(txtCongTrinhKhac, "");
            return bStatus;
        }

        private void txtMaThuaDat_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtMaThuaDat();
        }

        private void txtDiaChi_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtDiaChi();
        }

        private void txtThoiHan_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtThoiHan();
        }

        private void txtMaDaGiac_Validating(object sender, CancelEventArgs e)
        {
            ValidatetxtMaDaGiac();
        }

        private void txtThoiHan_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
            {
                e.Handled = true;
            }

            // only allow one decimal point
            if (e.KeyChar == '.'
                && (sender as TextBox).Text.IndexOf('.') > -1)
            {
                e.Handled = true;
            }
        }

        private void dataGridViewNhapToaDo_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            dataGridViewNhapToaDo.Rows[e.RowIndex].ErrorText = "";
            float newFloat;

            if (dataGridViewNhapToaDo.Rows[e.RowIndex].IsNewRow) { return; }
            if (!float.TryParse(e.FormattedValue.ToString(),
                out newFloat))
            {
                e.Cancel = true;
                dataGridViewNhapToaDo.Rows[e.RowIndex].ErrorText = "Giá trị nhập vô phải là một số";
            }
        }
        
        private bool KiemTraDaGiacHopLe(string maDGCon)
        {
            DaGiacBLL dagiac = new DaGiacBLL();
            for (int i = 0; i < listViewDuaVoSo.Items.Count; i++)
            {
                string maDGCha = listViewDuaVoSo.Items[i].Text;
                if (!dagiac.KiemTraMotThuaDatChuaMotThuaDat(maDGCha, maDGCon))
                {
                    return false;
                }
            }
            return true;
        }
        #endregion

        private decimal[] ToaDo()
        {
            List<decimal> a = new List<decimal>();
            int count = dataGridViewNhapToaDo.Rows.Count;
            for (int i = 0; i < dataGridViewNhapToaDo.Rows.Count; i++)
            {
                a.Add(Convert.ToDecimal(dataGridViewNhapToaDo.Rows[i].Cells[0].Value));
                a.Add(Convert.ToDecimal(dataGridViewNhapToaDo.Rows[i].Cells[1].Value));
            }
            a[count * 2 - 2] = a[0];
            a[count * 2 - 1] = a[1];
            return a.ToArray();
        }

        private void LuuThuaDatChaCon()
        {
            ThuaDatBLL thuadat = new ThuaDatBLL();
            string[] maTdCha = new string[listViewDuaVoSo.Items.Count];
            for (int i = 0; i < listViewDuaVoSo.Items.Count; i++)
                maTdCha[i] = listViewDuaVoSo.Items[i].Text;
            thuadat.CapNhatThuaDatChaConGopThua(maTdCha,txtMaThuaDat.Text);
        }

        private void btnTaoGiayChungNhan_Click(object sender, EventArgs e)
        {
            FrmGiayChungNhan gcn = new FrmGiayChungNhan();
            gcn.Visible = true;
        }

        #endregion

        
        #region Xử lý hình ảnh
        private void LoadBanDo()
        {
            DaGiacBLL dagiac = new DaGiacBLL();
            string[] mangThuaDat = new string[ThuaDat_ChuSuDung.Count];
            for (int i = 0; i < ThuaDat_ChuSuDung.Count; i++)
            {
                mangThuaDat[i] = dagiac.LayMaDaGiacTuMaThuaDat(ThuaDat_ChuSuDung[i].MATHUADAT.Trim());
            }
                try
                {
                    mapImageThuaDatGop.Map = DaGiac.KhoiTaoDaGiac(mangThuaDat);
                    mapImageThuaDatGop.Refresh();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Lỗi");
                }
        }

        private void btnZoomIn_Click(object sender, EventArgs e)
        {
            mapImageThuaDatGop.ActiveTool = SharpMap.Forms.MapImage.Tools.ZoomIn;
            mapImageThuaDatGop.Refresh();
        }

        private void btnZoomOut_Click(object sender, EventArgs e)
        {
            mapImageThuaDatGop.ActiveTool = SharpMap.Forms.MapImage.Tools.ZoomOut;
            mapImageThuaDatGop.Refresh();
        }

        private void btnPan_Click(object sender, EventArgs e)
        {
            mapImageThuaDatGop.ActiveTool = SharpMap.Forms.MapImage.Tools.Pan;
            mapImageThuaDatGop.Refresh();
        }
        #endregion

    }
}
